package com.dkd.day20250718;

import java.util.Scanner;

public class Main30 {
    public static void main(String[] args) {
        //同一个数轴X上有两个点的集合A={A1, A2, …, Am}和B={B1, B2, …, Bn}，
        // Ai和Bj均为正整数，A、B已经按照从小到大排好序，A、B均不为空，给定一个距离R(正整数)，
        // 列出同时满足如下条件的所有（Ai, Bj）数对：Ai <= Bj Ai, Bj之间的距离小于等于R
        // 在满足1,2的情况下,每个Ai只需输出距离最近的Bj 输出结果按Ai从小到大的顺序排序
        //
        //输入描述
        //第一行三个正整数m,n,R
        //
        //第二行m个正整数,表示集合A
        //
        //第三行n个正整数,表示集合B
        //
        //输入限制：
        //
        //1<=R<=100000, 1<=n,m<=100000, 1<=Ai,Bj<=1000000000
        //
        //输出描述
        //每组数对输出一行Ai和Bj,以空格隔开\
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int r = sc.nextInt();
        int[] setA = new int[n];
        int[] setB = new int[m];
        for (int i = 0; i < n; i++) {
            setA[i] = sc.nextInt();
        }
        for (int i = 0; i < m; i++) {
            setB[i] = sc.nextInt();
        }

        solve(setA,setB,r);
    }

    public static void solve(int[] setA, int[] setB,int r) {
        int indexB=0;
        for(int numberA:setA){
            while(indexB<setB.length && setB[indexB]<numberA){
                indexB++;
            }
            if(indexB<setB.length && setB[indexB]-numberA<=r){
                System.out.println(numberA + " " + setB[indexB]);
            }
        }
    }
}
